package com.qingchi.web.controller.oldVersion;

import com.qingchi.web.model.old.AppInitDataVO;
import com.qingchi.web.model.old.HomeTabTalkQueryQO;
import com.qingchi.web.service.AppService;
import com.qingchi.web.service.talk.TalkService;
import com.socialuni.api.feignAPI.SocialuniTagAPI;
import com.socialuni.api.model.RO.talk.CenterTalkRO;
import com.socialuni.social.api.model.ResultRO;
import com.socialuni.social.model.model.HomeSwiperVO;
import com.socialuni.social.model.model.RO.app.SocialDistrictRO;
import com.socialuni.social.model.model.RO.community.tag.TagRO;
import com.socialuni.social.model.model.RO.community.tag.TagTypeRO;
import com.socialuni.social.sdk.constant.AppConfigConst;
import com.socialuni.social.sdk.constant.AppData;
import com.socialuni.social.sdk.constant.CommonConst;
import com.socialuni.social.sdk.constant.ViolateType;
import com.socialuni.social.sdk.model.RectangleVO;
import com.socialuni.social.sdk.platform.MapUtil;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @author qinkaiyuan
 * @date 2019-09-28 11:09
 * 前端初始化内容
 */
@RestController
@RequestMapping("app")
public class OldAppInitController {
    @Resource
    private TalkService talkService;
    @Resource
    AppService appService;
    @Resource
    SocialuniTagAPI socialuniTagAPI;

    @PostMapping("queryAppInitDataLoad")
    public ResultRO<?> queryAppInitDataLoad(@RequestBody HomeTabTalkQueryQO queryVO, String appGenderType) {
        AppInitDataVO appInitData = new AppInitDataVO();
        //定位相关
        String queryAdCode = queryVO.getAdCode();
        SocialDistrictRO districtVO = new SocialDistrictRO();
        //不为空，且不为已开启定位
        //不为空，或者为null（老版本），或者不为true，则开启定位不走这里
        //前台开启了定位就不走这里了，跟没开启定位也没关系啊，
        //这里的主要逻辑就是，如果初始，给用户设置默认城市和经纬度
        //没有为queryAdCode没有为null的时候除了老版本可能。
        //老版本也给返回值也没问题啊
        //如果用户的位置为空

        //前台只有初始的时候，会设置district
        //未开启定位的时候会，设置lon和lat
        //未开启定位和初始，其他比如lon为null的时候也只能是未开启定位，或者初始，如果是后台获取不到，则只能靠查询说说的时候获取了，如果开启了定位也获取不到也只能能考查询获取了
        //如果用户为初始
        if (CommonConst.initAdCode.equals(queryAdCode)) {
            RectangleVO rectangleVO = MapUtil.getRectangle();
            String curAdCode;
            //如果后台定位不到位置
            if (rectangleVO != null) {
                //获取定位城市码
                curAdCode = rectangleVO.getAdCode();
                //获取用户首次定位城市
                if (StringUtils.isEmpty(curAdCode)) {
                    //判断不为空，并且取市区adCode
                    curAdCode = CommonConst.chinaDistrictCode;
                } else {
                    curAdCode = StringUtils.substring(curAdCode, 0, 4) + "00";
                }
                if (rectangleVO.getLon() != null) {
                    districtVO.setLon(rectangleVO.getLon());
                    districtVO.setLat(rectangleVO.getLat());
                }
            } else {
                curAdCode = CommonConst.chinaDistrictCode;
            }
            districtVO.setAdCode(curAdCode);

            //只有初始，或者queryCode是null，才设置lon和lat，他查的地方和他的地方不冲突
            appInitData.setDistrict(districtVO);
            //用户未在前台开启定位，需要靠后台获取经纬度定位
        } else if (BooleanUtils.isNotTrue(false)) {
            RectangleVO rectangleVO = MapUtil.getRectangle();
            //只有满足这两个条件才修改 用户adcode
            //如果用户的位置为空
            if (rectangleVO != null && rectangleVO.getLon() != null) {
                //如果定位位置不为空，且用户未开启前台定位，则更新用户的地理位置,或者用户当前经纬度为null
                districtVO.setLon(rectangleVO.getLon());
                districtVO.setLat(rectangleVO.getLat());
            } else {
                districtVO.setLon(queryVO.getLon());
                districtVO.setLat(queryVO.getLat());
            }
        }

        String homeType = queryVO.getHomeType();
        if (homeType != null) {
            //使用最新的
            if (districtVO.getLat() != null) {
                queryVO.setLat(districtVO.getLat());
                queryVO.setLon(districtVO.getLon());
            }
            // 不为关注，且user不为null，就是 为关注的时候必须存在用户
            ResultRO<List<CenterTalkRO>> resultRO = talkService.queryHomeTalks();
            if (resultRO.hasError()) {
                return resultRO;
            }
            appInitData.setTalks(resultRO.getData());
        }
        //appConfig
        appInitData.setAppConfig(AppConfigConst.appConfigMap);
        //homeSwipers

        ResultRO<List<HomeSwiperVO>> queryHomeSwipers = appService.queryHomeSwipers();
        appInitData.setHomeSwipers(queryHomeSwipers.getData());
        return new ResultRO<>(appInitData);
    }

    @PostMapping("queryAppInitDataReady")
    public ResultRO<AppInitDataVO> queryAppInitDataReady() {
        AppInitDataVO appInitData = new AppInitDataVO();

        appInitData.setChats(new ArrayList<>());
        //tags
        //前台搜索，和新增tag搜索时展示使用
        ResultRO<List<TagRO>> hotTags = socialuniTagAPI.queryHotTags();
        appInitData.setTags(hotTags.getData());
        ResultRO<List<TagTypeRO>> hotTagTypess = socialuniTagAPI.queryHotTagTypes();
        //tagTypes
        appInitData.setTagTypes(hotTagTypess.getData());
        //reportTypes
        appInitData.setReportTypes(ViolateType.frontShowReportTypes);
        appInitData.setDistricts(AppData.getHotDistricts());
        //onlineUsersCount
        appInitData.setOnlineUsersCount(0);
        return new ResultRO<>(appInitData);
    }
}
